package util.AST.Comando;

import java.util.ArrayList;

import util.AST.Terminal.Identificador;
import util.AST.Terminal.Tipo;

public class ComandoSubRotina extends Comando {

	private Tipo tipo;
	private Identificador nome;
	
	private ArrayList<ComandoVariavel> param;
	private Funcao Funcao;
	
	public ComandoSubRotina(Tipo tipo, Identificador nome, ArrayList<ComandoVariavel> param, Funcao funcao) {
		this.tipo = tipo;
		this.nome = nome;
		this.param = param;
		this.Funcao = funcao;
	}

	@Override
	public String toString(int level) {
		int nextLevel = level+5;
		StringBuffer str = new StringBuffer();
		str.append("FUNC\n");
		str.append(super.getSpaces(nextLevel)+"|-");
		if ( this.tipo != null ) {
			str.append(this.tipo.toString(nextLevel));
		}
		str.append(super.getSpaces(nextLevel)+"|-");
		if ( this.nome != null ) {
			str.append(this.nome.toString(nextLevel));
		}
		str.append(super.getSpaces(nextLevel) + "|-PARM\n");
		if ( this.param != null ) {
			for (ComandoVariavel param : this.param) {
				str.append(super.getSpaces(nextLevel+5) + "|-");
				str.append(param.toString(nextLevel+5));
			}
		}
		str.append(super.getSpaces(nextLevel) + "|-CORP\n");
		if ( this.Funcao != null ) {
			str.append(this.Funcao.toString(nextLevel));
		}
		return str.toString();
	}

	public Tipo getTipo() {
		return tipo;
	}

	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}

	public Identificador getNome() {
		return nome;
	}

	public void setNome(Identificador nome) {
		this.nome = nome;
	}

	public ArrayList<ComandoVariavel> getParam() {
		return param;
	}

	public void setParam(ArrayList<ComandoVariavel> param) {
		this.param = param;
	}

	public Funcao getFuncao() {
		return Funcao;
	}

	public void setFuncao(Funcao funcao) {
		Funcao = funcao;
	}
	
	

}
